function 普若蜜思(doing){
    var that=this
    this.当前状态='等待'
    this.成功结果=undefined
    this.失败原因=undefined
    this.成功回调函数list=[]
    this.失败回调函数list=[]
    let {log}=console
    function 修改状态为成功(成功结果){
        log('修改状态为成功:',成功结果)
            log('当前状态:',that.当前状态)
            if(that.当前状态=='等待'){
                that.当前状态='成功'
                log('当前状态 修改后:',that.当前状态)
                that.成功结果=成功结果
                that.成功回调函数list.forEach(成功回调函数 => {
                    成功回调函数(that.成功结果)
                });
            }
    }
    function 修改状态为失败(失败原因){
        log('修改状态为失败:',失败原因)
            log('当前状态:',that.当前状态)
            if(that.当前状态=='等待'){
                that.当前状态='失败'
                log('当前状态 修改后:',that.当前状态)
                that.失败原因=失败原因
                that.失败回调函数list.forEach(失败回调函数 => {
                    失败回调函数(that.失败原因)
                })
            }
    }
    try{
        log('doing')
        doing(修改状态为成功, 修改状态为失败)
    }catch(失败原因){
        修改状态为失败(失败原因)
    }
}
普若蜜思.prototype.then=function(成功回调函数, 失败回调函数){
    let that=this
    if(that.当前状态=='等待'){
        return new 普若蜜思(function(修改状态为成功,修改状态为失败){
            that.成功回调函数list.push(
                function(){
                    try {
                        成功回调函数(that.成功结果)
                    } catch (error) {
                        修改状态为失败(error)
                    }
                }
            )
            that.失败回调函数list.push(
                function(){
                    try {
                        失败回调函数(that.失败原因)
                    } catch (error) {
                        修改状态为失败(error)
                    }
                }
            )
        }
        )
    }
    if(that.当前状态=='成功'){
        return new 普若蜜思(function(修改状态为成功,修改状态为失败){
            setTimeout(
                function(){
                    try {
                        成功回调函数(that.成功结果)
                    } catch (error) {
                        修改状态为失败(error)
                    }
                }
            )
        })
    }
    if(that.当前状态=='失败'){
        return new 普若蜜思(function(修改状态为成功,修改状态为失败){
            setTimeout(
                function(){
                    try {
                        失败回调函数(that.失败原因)
                    } catch (error) {
                        修改状态为失败(error)
                    }
                }
            )
        })
    }

}


a=new 普若蜜思((修改状态为成功, 修改状态为失败)=>{
    修改状态为失败('？？')
    
})